#include "loginwidget.h"
#include "ui_loginwidget.h"
#include "mainwindow.h"
#include "registerwidget.h"
#include <QMessageBox>

LoginWidget::LoginWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::LoginWidget)
    , mainWindow(nullptr)  // 初始化为 nullptr
{
    ui->setupUi(this);

    // 去除窗口自带的头部
    setWindowFlag(Qt::FramelessWindowHint);

    // 初始化子组件
    titleBar = new TitleBar;
    loginbar = new loginBar;
    statusBar = new StatusBar;

    // 将子组件加入布局
    ui->horizontalLayout_4->addWidget(titleBar);
    ui->horizontalLayout_5->addWidget(loginbar);
    ui->horizontalLayout_6->addWidget(statusBar);

    // 标题栏信号处理
    connect(titleBar, &TitleBar::titleOperator, this, [=](int flag) {
        if (flag == 3) { // 关闭
            int state = QMessageBox::question(this, "询问", "确认关闭窗口？",
                                              QMessageBox::Yes | QMessageBox::No);
            if (state == QMessageBox::Yes)
                this->close();
        } else if (flag == 1) { // 最小化
            this->showMinimized();
        } else if (flag == 2) { // 最大化/还原
            if (this->isMaximized())
                this->showNormal();
            else
                this->showMaximized();
        }
    });

    // 登录状态栏信息
    connect(loginbar, &loginBar::loginFail, statusBar, &StatusBar::showMsg);
    connect(loginbar, &loginBar::clearMsg, statusBar, &StatusBar::clearMsg);

    // 登录成功
    connect(loginbar, &loginBar::loginSuccess, this, &LoginWidget::onLoginSuccess);

    // 注册功能
    connect(loginbar, &loginBar::registerRequested, this, [=]() {
        // 创建注册对话框
        RegisterWidget *registerDialog = new RegisterWidget(this);

        // 连接注册结果信号
        connect(registerDialog, &RegisterWidget::registerSuccess, statusBar, &StatusBar::showMsg);
        connect(registerDialog, &RegisterWidget::registerFail, statusBar, &StatusBar::showMsg);

        // 显示对话框
        registerDialog->exec();

        // 对话框关闭后释放内存
        registerDialog->deleteLater();
    });
}

LoginWidget::~LoginWidget()
{
    // 清理 MainWindow
    if (mainWindow) {
        mainWindow->disconnect();  // 断开所有信号连接
        mainWindow->deleteLater();
        mainWindow = nullptr;
    }

    delete ui;
}

// 登录成功处理函数
void LoginWidget::onLoginSuccess(int userId, const QString &role)
{
    this->hide();  // 隐藏登录界面

    if (!mainWindow) {
        mainWindow = new MainWindow();  // 不设置父对象，避免自动删除

        // 设置用户信息
        mainWindow->setCurrentUserInfo(userId, role);

        // 建立 DataMonitor和AlertManager 的连接
        mainWindow->setupAlertConnection();

        // 连接"退出登录"信号
        connect(mainWindow, &MainWindow::logoutRequested, this, &LoginWidget::onLogoutRequested);

        // 连接窗口关闭事件
        connect(mainWindow, &MainWindow::destroyed, this, [this]() {
            mainWindow = nullptr;
        });
    }

    mainWindow->show();  // 显示主窗口
}

// 退出登录处理函数
void LoginWidget::onLogoutRequested()
{
    if (mainWindow) {
        mainWindow->hide();  // 隐藏主窗口
    }

    this->show();  // 重新显示登录界面
    loginbar->clearLoginInfo();  // 清空登录信息
}
